// 导入依赖的模块
yepjs.require("jquery");
yepjs.require("YBA.Common");
yepjs.require("YBA.Plugin.plugins");
yepjs.require("YBA.Data.login");

// 登录模块
yepjs.define("login", {

    NS: "YBA.Logic",

    field: function() {

        var Biz = {
            // 初始化事件
            init: function() {
                for (var i in Biz.event) {
                    Biz.event[i]();
                }
                Biz.fn.getCodeImg();

                // 处理在按钮禁用的情况下，用户刷新页面导致部分浏览器下按钮保持禁用的问题
                Biz.el.jsubmit.removeAttr("disabled");
            },
            //  公共变量
            vars: {
            	// 模板列表
                tpl: (function(){
                    var tpl = {};
                    $("script[type='text/ysmart']").each(function(){
                        var t = $(this);
                        tpl[t.attr("data-name")] = t.html();
                    });
                    return tpl;
                })(),
                //记录定时器
                timer:""
            },
            // 页面元素
            el: {
                jform: $("#j-form"),
                jgetCodeImg: $("#j-getCodeImg"),
                jcodeImg: $("#j-codeImg"),
                jsubmit: $("#j-submit"),
                jreset: $("#j-reset"),
                jcodeGroup:$("#j-codeGroup")
            },
            // 功能函数集合
            fn: {
                // 表单验证
                formCheck: function(name) {

                	// 显示错误信息
                    var showError = function(obj, msg) {
                        var parent = obj.parent();
                        parent.addClass("error");
                    };

                    // 隐藏错误信息
                    var hideError = function(obj) {
                        obj.parent().removeClass("error");
                    };

                    // 数据验证对象
                    var dataCheck = {
                        username: {
                            obj: Biz.el.jform.find("[data-name='username']"),
                            fn: function() {
                                var val = this.obj.val();
                                if (YBA.Common.check.isNull(val)) {
                                    showError(this.obj);
                                    return false;
                                } else {
                                    hideError(this.obj);
                                    return true;
                                }
                            }
                        },
                        password: {
                            obj: Biz.el.jform.find("[data-name='password']"),
                            fn: function() {
                                var val = this.obj.val();
                                if (YBA.Common.check.isNull(val)) {
                                    showError(this.obj);
                                    return false;
                                } else {
                                    hideError(this.obj);
                                    return true;
                                }
                            }
                        },
                        code: {
                            obj: Biz.el.jform.find("[data-name='code']"),
                            fn: function() {
                            	if(this.obj.length == 0){
                            		return true;
                            	}
                                var val = this.obj.val();
                                if (YBA.Common.check.isNull(val)) {
                                    showError(this.obj);
                                    return false;
                                } else {
                                    hideError(this.obj);
                                    return true;
                                }
                            }
                        }
                    };

                    if (name && dataCheck[name]) {
                        return dataCheck[name].fn();
                    } else {
                        var errLen = 0;
                        for (var i in dataCheck) {
                            if (!dataCheck[i].fn()) {
                                errLen++;
                            }
                        }
                        if (errLen > 0) {
                            return false;
                        }
                        return true;
                    }
                },
                // 激活验证
                activeCheck: function(form,name) {

                	// 显示错误信息
                    var showError = function(obj, msg) {
                        var msgDom = obj.siblings('.message');
                        var msgTxt = msgDom.children('i')
                        msgDom.addClass("msg-error").removeClass('msg-tip');
                        msgTxt.html(msg);
                        msgDom.show();
                    };

                    // 隐藏错误信息
                    var hideError = function(obj, msg) {
                        var msgDom = obj.siblings('.message');
                        var msgTxt = msgDom.children('i')
                        msgDom.hide();
                        msgDom.addClass("msg-tip").removeClass('msg-error');
                        msgTxt.html(msg);
                    };

                    // 数据验证对象
                    var dataCheck = {
                        newPassword:{
                            obj: form.find("[name='newPassword']"),
                            fn: function() {
                                var val = this.obj.val();
                                if (YBA.Common.check.isNull(val)) {
                                    showError(this.obj,"请输入新密码");
                                    return false;
                                }else if(!YBA.Common.check.isPwd(val)){
                                	showError(this.obj,"至少六位的英文数字组合");
                                    return false;
                                }else if(val == dataCheck["oldPassword"].obj.val()){
                                    showError(this.obj,"新密码不能与旧密码相同");
                                    return false;
                                }else if(YBA.Common.check.isHowLong(val,50)){
                                	showError(this.obj,"新密码过长");
                                    return false;
                                } else {
                                    hideError(this.obj,"请输入新密码");
                                    return true;
                                }
                            }
                        },
                        passwordSecond: {
                            obj: form.find("[name='passwordSecond']"),
                            fn: function() {
                                var val = this.obj.val();
                                if (YBA.Common.check.isNull(val)) {
                                    showError(this.obj,"请再次输入新密码");
                                    return false;
                                } else if(val != dataCheck["newPassword"].obj.val()){
                                    showError(this.obj,"两次输入的密码不一致");
                                    return false;
                                }else {
                                    hideError(this.obj,"请再次输入新密码");
                                    return true;
                                }
                            }
                        },
                        oldPassword: {
                            obj: form.find("[name='oldPassword']"),
                            fn: function() {
                                var val = this.obj.val();
                                if (YBA.Common.check.isNull(val)) {
                                    showError(this.obj,"请输入旧密码");
                                    return false;
                                } else if(YBA.Common.check.isHowLong(val,50)){
                                	showError(this.obj,"旧密码过长");
                                    return false;
                                } else {
                                    hideError(this.obj,"请输入旧密码");
                                    return true;
                                }
                            }
                        },
                        code: {
                            obj: form.find("[name='code']"),
                            fn: function() {
                            	if(this.obj.length == 0){
                            		return true;
                            	}
                                var val = this.obj.val();
                                if (YBA.Common.check.isNull(val)) {
                                    showError(this.obj,"请输入验证码");
                                    return false;
                                } else {
                                    hideError(this.obj,"请输入验证码");
                                    return true;
                                }
                            }
                        }
                    };

                    if (name && dataCheck[name]) {
                        return dataCheck[name].fn();
                    } else {
                        var errLen = 0;
                        for (var i in dataCheck) {
                            if (!dataCheck[i].fn()) {
                                errLen++;
                            }
                        }
                        if (errLen > 0) {
                            return false;
                        }
                        return true;
                    }
                },
                // 图片验证码
                getCodeImg: function () {
                    YBA.Data.login.getCode(Biz.el.jcodeImg);
                },
                // 表单提交
                submit: function() {
                    if (Biz.fn.formCheck()) {
                        Biz.el.jsubmit.attr("disabled", "disabled");
                        YBA.Data.login.loginSubmit(Biz.el.jform.serialize(), function(json){
                            if(json.code == 200){
                            	if(json.user.isUpdateDefaultPwd != "0"){
                            		YBA.Plugin.msgtip({type: "o", msg: json.message});
                                    setTimeout(function(){
                                        location.href = $("#j-jumpurl").val();
                                    }, 1500);
                            	}else{
                            		Biz.fn.activeForm(json);
                            	} 
                            }else{
                            	if(!json.flag){
                            		Biz.el.jcodeGroup.show();
                            		Biz.el.jcodeGroup.find("[name='code']").attr("data-name","code");
                            	}
                                Biz.el.jsubmit.removeAttr("disabled");
                                YBA.Plugin.msgtip({type: "i",msg: json.message});
                            }
                        })
                    }
                    return false;
                },
                //短信发送倒计时
                countDown:function(dom,time){
                	dom.val(time+"秒");
                	Biz.vars.timer = setInterval(function(){
                		if(time>0){
                			time--;
	                		dom.val(time+"秒");
                		}else{
                			clearInterval(Biz.vars.timer);
                			dom.removeAttr("disabled").removeClass("disableBtn").addClass("codeBtn").val("发送验证码");
                		}
                	},1000);
                },
                //用户第一次登陆密码修改
                activeForm:function(json){
                    var popform = new YBA.Plugin.popform({
                        title: "安全操作",
                        className: "ui-dialog-editPassword",
                        content: Biz.vars.tpl.activationTpl,
                        width: 564,
                        destroy: true,
                        onHide: function () {
                            // 隐藏弹窗时要执行的回调函数
                        	YBA.Data.login.logout({},function(){
                        		return false;
                        	});
                        	Biz.el.jsubmit.removeAttr("disabled");
                        	clearInterval(Biz.vars.timer);
                        },
                        onShow: function () {
                            // 显示弹窗时要执行的回调函数
                        	// 文本框验证
                            var op = $(".form-group");
                            var form = $(".ui-dialog-form");
                            op.each(function() {
                                var t = $(this),
                                    input = t.find(".required"),
                                    name = input.attr("name"),
                                    holder = input.siblings(".message");
                                input.blur(function() {
                                    Biz.fn.activeCheck(form,name);
                                }).focus(function() {
                                    holder.show();
                                });;
                            });
                            $("#j-phone").html(json.user.mobile);
                            form.delegate(".j-getCode","click",function(){
                        		var data = {
                        			token:"tokennawang",
                        			username: json.user.username
                        			
                        		}
                        		var t = $(this);
                            	t.attr("disabled", "disabled").removeClass("codeBtn").addClass("disableBtn");
                            	Biz.fn.countDown(t,120);
                        		YBA.Data.login.getMessageCode(data,function(json){
                        			if(json.code == 200) {
                        				YBA.Plugin.msgtip({type: "o", msg: json.desc});
                        			}else{
                                        YBA.Plugin.msgtip({type: "i", msg: json.desc});
                                    }
                        		})	
                            });
                        },
                        btns: [{
                            value: "确定",
                            className: "blue btn g-mr10",
                            fn: function () {
                                var form = $(".ui-dialog-form");
                                if (!Biz.fn.activeCheck(form)) {
                                	return false;
                                }else{
                                	var form = popform.self.find("form");
                                    var data = form.serialize();
                                    
                                    data = data + "&userId="+ json.user.id +"&token=tokennawang"+"&type=0";


                                    YBA.Data.login.oncePasswordUpdate(data, function(json){
                                        if(json.code == 200) {
                                        	Biz.el.jform.find("[data-name='password']").val("");
                                            YBA.Plugin.msgtip({type: "o", msg: json.desc});
                                            popform.hide();
                                        }else{
                                            YBA.Plugin.msgtip({type: "i", msg: json.desc});
                                        }
                                    });
                                }
                            }
                        }]
                    }).show();
                }
            },
            // 初始化时执行的所有事件
            event: {
                // 表单提交
                submit: function() {
                    Biz.el.jform.bind("submit", Biz.fn.submit);
                },
                // 重置表单
                reset: function() {
                    Biz.el.jreset.bind("click", function () {
                        $(".j-placeHolder").find("input").val("").keyup().siblings("span").show().parent().removeClass("error");
                    });
                },
                // 文本框验证
                blurCheck: function() {
                    Biz.el.jform.find(".j-formcheck").bind("blur", function() {
                        var t = $(this);
                        var name = t.attr("data-name");
                        Biz.fn.formCheck(name);
                    });
                },
                // 文本框占位符
                placeHolder: function() {
                    YBA.Plugin.placeHolder({
                        con: $(".j-placeHolder")
                    });
                },
                // 更换验证码图片
                getCodeImg: function() {
                    Biz.el.jgetCodeImg.bind("click", function(){
                        Biz.fn.getCodeImg();
                    });
                }
            }
        };

        Biz.init();

        return Biz;
    }
});
